import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
#得到图像的幅度谱后进行一个随机的扰动再映射回去
# 读图并转灰度
img = Image.open('D:\\2D-DFT\image\\test.jpg').convert('L')
img = np.array(img, dtype=np.float32)

# 傅里叶变换
f = np.fft.fft2(img)
mag, phase = np.abs(f), np.angle(f)

# 生成扰动：每个频率点乘以一个 [0.5, 1.5] 的随机因子
random_scale = np.random.uniform(0.5, 1.5, size=mag.shape)
perturbed_mag = mag * random_scale

# 构造新频域
f_perturbed = perturbed_mag * np.exp(1j * phase)

# 逆变换回图像
img_new = np.fft.ifft2(f_perturbed)
img_new = np.real(img_new)
img_new = np.clip(img_new, 0, 255).astype(np.uint8)

# 显示对比图
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.title("Original Image")
plt.imshow(img, cmap='gray')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.title("Randomized Magnitude (Preserve Phase)")
plt.imshow(img_new, cmap='gray')
plt.axis('off')

plt.tight_layout()
plt.show()
